# 模版加载方法式一：loader加载
# from django.template import loader
# from django.http import HttpResponse
#
#
# def hello(request):
#     context = {
#         'name': '李四'
#     }
#     t = loader.get_template('hello.html')
#     html = t.render(context)
#     return HttpResponse(html)


# 模版加载方法式二：render加载
from django.shortcuts import render
from django.template import Template, Context   # 调用template, 以及上下文处理器
from django.http import HttpResponse


def hello(request):
    # if request.method == 'GET':
    context = {
        'name': request.method
    }
    return render(request, 'hello.html', context)


def func():
    return '你好张三， 我叫函数！'


class Web:
    @staticmethod
    def webName():
        return '你好张三，我是类方法'


def test(request):
    context = {
        'name':  '张三',
        'list_obj':  ['python', 'java', 'c++'],
        'dict_obj':  {'name': '百度', 'url': 'www.baidu.com'},
        'func': func,
        'class_obj':  Web(),
    }

    return render(request, 'test.html', context)


# 使用locals()的方法
# def test(request):
#     def func():
#         return '你好张三， 我叫函数！'
#     name = '张三'
#     list_obj = ['python', 'java', 'c++']
#     dict_obj = {'name': '百度', 'url': 'www.baidu.com'}
#     class_obj = Web()
#
#     return render(request, 'test.html', locals())


# 调用if标签模板的视图函数
def if_test(request, pk):
    context = {'money': 2000, 'name': '李四'}
    return render(request, 'if_test.html', context)


# 标签嵌套入视图函数用法
# def if_test(request):
#     t = '''
# {% if name == '张三' %}
#     {% if money > 10000 %}
#         <p>你好富翁张三, 你的余额{{ money }}</p>
#     {% elif money > 1000 %}
#         <p>你好小康张三, 你的余额{{ money }}</p>
#     {% else %}
#         <p>你好穷人张三, 你的余额是{{ money }}</p>
#     {% endif %}
# {% else %}
#     <p>你不是张三</p>
# {% endif %}
#     '''
#     context = {'money': 20000, 'name': '李四'}
#     return HttpResponse(Template(t).render(Context(context)))


# def for_test(request):
#     t = '''
#     {% for i in list1 %}
#         <p>{{ i }}</p>
#     {% empty %}
#          <p>列表中没有数据</p>
#     {% endfor %}
#     '''
#     context = {'list1': ['python', 'java', 'c++']}
#     return HttpResponse(Template(t).render(Context(context)))


# 调用for标签模板的视图函数
def for_test(request):
    context = {'list1': ['python', 'java', 'c++']}
    return render(request, 'for_test.html', context)


# for 模板循环嵌套
# categories 是一个对象列表, 有两个对象
# products 列表 【。。。。。，。。。。】
'''
{% for category in categories %}    通过循环获取对象
    <h2>{{ category.name }}</h2>    打开对象的属性name
    {% if category.description %}   判断列产品是否有数据
        <ul>
            {% for product in category.products %}  循环产品里面的产品
            <li>{{ product.name }}</li>
        </ul>
    {% endif %}
    <hr>
    {% if forloop.last %}
        <p>Total categories: {{ forloop.counter }}</p>
    {% endif %}
{% endfor %}
'''


def home(request):
    data = {
        'hello': 'hello world!',
        'word': 'data value key index',
        'value': 5,
        'list_data': [
            {'name': 'c++', 'num': 2, 'author': {'name': 'ycs', 'age': 16}},
            {'name': 'python', 'num': 3, 'author': {'name': 'tom', 'age': 19}},
            {'name': 'java', 'num': 1, 'author': {'name': 'jack', 'age': 17}},
        ],
        'list_demo': ['demo_data']
    }
    return render(request, 'home.html', data)


def login(request):
    poem = [{'title': '秋登兰山寄张五', 'poet': '孟浩然',
             'poem': "北山白云里，隐者自怡悦。相望试登高，心随雁飞灭。愁因薄暮起，兴是清秋发。时见归村人，沙行渡头歇。天边树若荠，江畔洲如月。何当载酒来，共醉重阳节。",
             'is_published': True}
    ]
    return render(request, 'login.html', {'poem': poem})


# 重定向测试的视图函数需要导入的模块
from django.http import HttpResponseRedirect
from django.urls import reverse


# 重定向测试的视图函数
def test_reverse(request):
    return HttpResponseRedirect(reverse("book:test"))
